package aliyun.cx.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import aliyun.cx.admin.entity.Comment;

import java.util.List;
import java.util.Map;

/**
 * 评论服务接口
 */
public interface CommentService extends IService<Comment> {
    
    /**
     * 分页查询评论列表（包含关联信息）
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID（可选）
     * @param articleId 文章ID（可选）
     * @param parentId 父评论ID（可选）
     * @param status 评论状态（可选）
     * @param content 评论内容关键词（可选）
     * @return 分页评论列表
     */
    IPage<Comment> getCommentPageWithRelations(int page, int size, Long userId, Long articleId, Long parentId, Integer status, String content);
    
    /**
     * 分页查询评论列表
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID（可选）
     * @param articleId 文章ID（可选）
     * @param parentId 父评论ID（可选）
     * @return 分页评论列表
     */
    IPage<Comment> getCommentPage(int page, int size, Long userId, Long articleId, Long parentId);
    
    /**
     * 根据评论ID获取评论详情（包含关联信息）
     * @param id 评论ID
     * @return 评论详情
     */
    Comment getCommentWithRelations(Long id);
    
    /**
     * 根据文章ID获取评论列表（包含关联信息）
     * @param articleId 文章ID
     * @return 评论列表
     */
    List<Comment> getCommentsByArticleWithRelations(Long articleId);
    
    /**
     * 根据用户ID获取评论列表（包含关联信息）
     * @param userId 用户ID
     * @return 评论列表
     */
    List<Comment> getCommentsByUserWithRelations(Long userId);
    
    /**
     * 根据文章ID获取评论列表
     * @param articleId 文章ID
     * @return 评论列表
     */
    List<Comment> getCommentsByArticleId(Long articleId);
    
    /**
     * 根据用户ID获取评论列表
     * @param userId 用户ID
     * @return 评论列表
     */
    List<Comment> getCommentsByUserId(Long userId);
    
    /**
     * 创建评论
     * @param comment 评论信息
     * @return 创建结果
     */
    boolean createComment(Comment comment);
    
    /**
     * 更新评论
     * @param comment 评论信息
     * @return 更新结果
     */
    boolean updateComment(Comment comment);
    
    /**
     * 删除评论
     * @param id 评论ID
     * @return 删除结果
     */
    boolean deleteComment(Long id);
    
    /**
     * 批量删除评论
     * @param ids 评论ID列表
     * @return 删除结果
     */
    boolean batchDeleteComments(List<Long> ids);
    
    /**
     * 审核评论
     * @param id 评论ID
     * @param status 审核状态（0-待审核 1-已通过 2-已拒绝）
     * @return 审核结果
     */
    boolean auditComment(Long id, Integer status);
    
    /**
     * 点赞评论
     * @param id 评论ID
     * @return 点赞结果
     */
    boolean likeComment(Long id);
    
    /**
     * 获取评论统计信息
     * @return 统计信息
     */
    Object getCommentStats();
    
    /**
     * 置顶/取消置顶评论
     * @param id 评论ID
     * @param isTop 是否置顶
     * @return 操作结果
     */
    boolean toggleCommentTop(Long id, Boolean isTop);
    
    /**
     * 批量审核评论
     * @param ids 评论ID列表
     * @param status 审核状态
     * @return 审核结果
     */
    boolean batchAuditComments(List<Long> ids, Integer status);
    
    /**
     * 获取置顶评论列表
     * @param articleId 文章ID
     * @param limit 限制数量
     * @return 置顶评论列表
     */
    List<Comment> getTopComments(Long articleId, Integer limit);
    
    /**
     * 举报评论
     * @param commentId 评论ID
     * @param reason 举报原因
     * @return 操作结果
     */
    boolean reportComment(Long commentId, String reason);
    
    /**
     * 获取评论举报记录
     * @param commentId 评论ID
     * @return 举报记录列表
     */
    List<Map<String, Object>> getCommentReports(Long commentId);
}
